--- %%NOBANNER%% -->
/*
%excelcr(libname=japan, infile=pdev.sas7dbat,
exceldir=Y:\CLINICAL\TACHY\BIOSTAT\Duo\Projects\VR-IDE\stat\JAPAN\ExcelFiles\);
*/
%macro excelcr(libname=, infile=, indata=, exceldir=);
/*-------------------------------------------------------\
| Copy Right: Duo Zhou; |
| Date: 9-28-2001; |
| Purpose: List all datasets under the library reference |
\-------------------------------------------------------*/
%local num i ndsns dsn filename extension dataname directory;
%let libname=%sysfunc(dequote(&libname)); %let dataname =;
options noxwait noxsync; x 'Exit';
%if (%length(%trim(%left(&libname))) le 1) %then %do;
%let infile=%sysfunc(dequote(&infile));
%let indata=%sysfunc(dequote(&indata));
%if (%quote(&infile) eq) and (%quote(&indata) ne) %then %do;
%let infile=&indata;
%end;
%if (%substr(&infile, %length(&infile), 1) eq %str(\)) or (%substr(&infile, %length(&infile), 1) eq %str(/)) %then %do;
libname _templib_ "&infile";
%let libname=&_templib_;
%end;
%else %if (%substr(&infile, %length(&infile), 1) ne %str(\)) and (%substr(&infile, %length(&infile), 1) eq %str(/)) %then %do;
%let pathrc=%sysfunc(filename(pathrf,&infile));
%let psid=%sysfunc(DOPEN(&pathrf));
%if &psid %then %do;
%let drc=%sysfunc(DCLOSE(&psid));
libname _templib_ "&infile";
%let libname=_templib_;
%end;
%else %if (%sysfunc(fileexist(&infile))) or (%sysfunc(fileexist(%trim(%left(&infile)).sas7bdat))) %then %do;
%let dataname=%sysfunc(reverse(%scan(%sysfunc(reverse(&infile)), 1, %str(\/))));
%let directory=%substr(&infile, 1, %eval(%length(&infile)-%length(&dataname)));
%if (%index(%quote(&dataname), %str(.))) %then %do;
%let extension=%sysfunc(reverse(%scan(%sysfunc(reverse(&infile)), 1, %str(.))));
%let dataname=%substr(&dataname, 1, %eval(%eval(%length(&dataname)-%length(&extension))-1));
%end;
libname _templib_ "&directory";
%let libname=_templib_;
%end;
%end;
%end;
%else %if (%length(%trim(%left(&libname))) gt 1) %then %do;
%if (%quote(&infile) eq) and (%quote(&indata) ne) %then %do;
%let infile=&indata;
%end;
%if (%length(%trim(%left(&infile))) ge 1) %then %do;
%let dataname=%sysfunc(reverse(%scan(%sysfunc(reverse(&infile)), 1, %str(\/)))); ;
%if (%index(%quote(&dataname), %str(.))) %then %do;
%let extension=%sysfunc(reverse(%scan(%sysfunc(reverse(&infile)), 1, %str(.))));
%let dataname=%substr(&dataname, 1, %eval(%eval(%length(&dataname)-%length(&extension))-1));
%end;
%end;
%end;
%let exceldir=%sysfunc(dequote(&exceldir));
%if (%length(%trim(%left(&exceldir))) >1) %then %do;
%if (%substr(&exceldir, %length(&exceldir), 1) ne %str(\)) %then %do;
%let exceldir=&exceldir.\;
%end;
%end;
proc datasets library=&libname memtype=data;
contents out=work._temp1(keep=memname engine nobs varnum name sorted sortedby nodupkey noduprec) data=_all_ noprint;
run;
proc sort data=_temp1; by memname sorted sortedby; run;
%if %nobs(_temp1)>0 %then %do;
%let datanames=;
/*** Cocatenate data set names ***/
proc sql noprint;
select distinct memname into :datanames separated by ' '
from _temp1
where name ne ' ' %if (%quote(&dataname) ne) %then %do; and upcase(memname) = %upcase("&dataname") %end;;
quit;
%if (%quote(&datanames) ne ) %then %do;
/*** Create excel files ***/
%let ndsns=%words(&datanames);
%put --> Note: Translating &ndsns data sets &datanames into excel sheets.;
ods listing close;
%do i=1 %to &ndsns;
%let filename=;
%let dsn&i=%qscan(&datanames, &i, %str( ));
%let filename=&&dsn&i...csv;
%put --> Note: Writing to the &i.th excel sheet: "&exceldir.&&dsn&i...csv".;
ods csv file="&exceldir.&filename";
proc print data=&libname..&&dsn&i label;
title "&&dsn&i";
run;
ods csv close;
%end;
ods listing;
%end;
%else %do;
%put Note: Dataset "&dataname" doesn%str(%') exist;
%end;
proc datasets library=work nolist;
delete _temp1;
run;quit;
%end;
%else %put There is no datasets in the library "&libname".;
%mend excelcr;